#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

int main() 
{
    pid_t pid;

    // 创建子进程
    pid = fork();
    if (pid == 0) 
    {
        // 子进程
        printf("I am child process\n");
        sleep(5);
        exit(1); // 退出码为0

    } 
    else 
    {
        // 父进程等待子进程结束
        pid_t rid;
        int status;
        rid = waitpid(pid, &status, 0);
        if (rid == -1) {
            perror("waitpid error");
            exit(2);
        }

        // 分析子进程的退出状态
        if (WIFEXITED(status)) 
        {
            // 子进程正常退出
            printf("Child exited, exit status = %d\n", WEXITSTATUS(status));
        }
        if (WIFSIGNALED(status)) 
        {
            // 子进程被信号终止
            printf("Child killed by signal %d", WTERMSIG(status));
            if (WCOREDUMP(status)) {
                // 子进程产生core dump
                printf(" (core dumped)");
            }
            printf("\n");
        }
    }

    return 0;
}
// int main()
// {
//     int a = 0 && 1 || 1;
//     printf("%d\n", a); 
// }